Top 10 Programming Resources
published 1 May 2024
This is a disorganised list of references and tools for software development that I still frequently find useful, but which are equally useful to beginners, and aren’t specific to the work I do.
-
- Provides short tutorials on many programming languages in the form of a single commented page of code.
- A good first point or cheat sheet, to see the syntax and structure of fundamental concepts in unfamiliar programming language, though usually doesn’t take you very far.
Manuals
Language servers / IDEs
- Language integration in code editors can at minimum provide syntax highlighting and show syntax errors as you type in real time. Often they let you jump from a code symbol to its definition, or show a pop up showing function documentation, and have some form of autocomplete. This is massively useful when programming in both a familiar or unfamiliar language.
- Available in VSCode (usually through the plugin store), Neovim, Jetbrains IDEs and many other editors.
Version control: git
- Version control of some kind is a must-have, it provides a line-by-line version history of your code, and allows you to revert changes to old versions if you need.
- Git is not github, think email vs gmail. You do not need a github account to use git and can in fact use it entirely locally.
- Git can be very complicated and overwhelming when using it to manage a project with many people.
It is not as bad as a single user, but still requires learning.
- https://rogerdudler.github.io/git-guide/
- www.atlassian.com/git/tutorials
- missing.csail.mit.edu/
- There are many GUI tools, and alternative CLI tools that available that simplify it as well
- Git is not the only option: version control systems such as subversion, fossil-scm, and mercurial are also used, but far less widely than git.
Library Genesis, Scihub
- Legally unscrupulous, this provides neer-do-wells easy access to seemingly every technical textbook ever published in the English language
- Books are a fantastic way to gain a structured overview into a topic, even just by reading chapter headings and skimming, and deep-diving where relevant or interesting.
-
- This is an amazing online tool lets you write a program in one of dozens of compiled programming language, and view the assembly produced by their compiler(s). It is an easy way to check if a small program is syntactically correct, even lets you execute your programs.
Hackernews forum: Terrible culture; techbros…techbros everywhere, but interesting things happening in surrounding the topic of software often float across here.
- If you ever want to get the average techbro’s opinion on something just append “site:news.ycombinator.com” to your search terms.
Tiny Tools and Resources
- tinytools.directory: the list of all tiny tools
- float.exposed: explore the binary representations of floating point numbers, and integer.exposed : view binary representations of integers.
- Dropin minimal CSS Large list of minimal CSS sheets for styling genric text html pages.
C and C++ Specific
- cppreference.com : high quality brief language reference
- wg21.link quick access to C++ draft standards
- thephd.dev Jeanheyd Meniede’s blog. Jeanheyd is is a C standard editor, and works extremely hard to improve the shared foundation C provides (including to C++), for examply by working on ABIs and text encoding. Their blog posts are extremely high quality.
- #include <C++>, inclusive C++ learning and development community and discord, their resouces page is particularly useful given the current interminable backlash against against any form of inclusivity in software communities and organisations.
- Cppcast A podcast about C++ that often has standards news and has interesting guests providing technical insight from across the spectrum of C++ users.
- Modern C book: e.g. ISBN 9781633437777. I have read parts of the 2nd edition and it offers great advice on writing nice, expressive C code.
Online Resources
Posts
- The fuzzy edges of text encoding, Everest Pipkin
- Julia Evans' Wizard Zines, she also blogs on on often about low-level linux systems programming things.
- ThingsKateDid (twitter) on dumping/visualising internal state from programs
- Driving Compilers, Fabiens Angalard A short series on how a C program gets from source to execution
- Improper heirachies (youtube), and everything else by Tom Murphy 7
- 100 rabbits On sustainable software development for art, from a sail boat.
- Falsehoods programmers believe about names, kalzumeus
- Often the assumptions you make about the world are wrong. Software is completely rigid; be extremely careful with what your software assumes about the world (if it has users).
Free Books on Topics in Computer Science
These are more advanced and assume an understanding of programming.
- Operating Systems: Three Easy Pieces
- Describes operating systems, the massively complex software systems underpinning personal computers, and how they provide abstraction from hardware details, the ability to multitask, security and much more.
- pages.cs.wisc.edu, download links per-chapter at the bottom of the page
- Crafting Interpreters, Bob Nystrom
- Describes how interpreted programming languages are implemented clearly and practically, by stepping through the implementation and improvement of a simple programming language.
- Crafting Interpreters
- Compilers, Principles, Techniques and Tools. Aho et al.
- Describes compilers, likely significant overlap with Crafting Interpreters.
- Static Program Analysis, Anders Moeller
- Describes techniques for the automatic analysis of computer programs. These techniques are employed by compilers, interpreters, and other tools, to optimise and prove the correctness of computer programs.
- cs.au.dk/~amoeller/spa